﻿using System.Collections.Generic;

namespace Limestone
{
    public interface IStorage
    {
        IPage GetPage(string path);
        IPage SavePage(IPage page);

        IPageTemplate SaveTemplate(IPageTemplate page);
        IPageTemplate GetTemplate(string path);
        IEnumerable<IPageTemplate> GetTemplates();

        bool MovePage(IPage page, string newParentPath);
        bool MovePage(IPage page, IPage newParentPage);
        bool CopyPage(IPage page, string targetParentPath);
        bool CopyPage(IPage page, IPage targetParentPage);
        bool DeletePage(IPage page);

        bool IsValidMoveTarget(IPage page, IPageStub newParentPage);
        bool IsValidCopyTarget(IPage page, IPage newParentPage);
        bool IsValidPageName(string name);

        IPageLookUp GetPageLookUp(bool forceDeepReload);
        void RemovePageFromLookUp(string pagePath);
        void AddPageToLookUp(IPageStub stub);

        IEnumerable<IPageStub> GetTrashCanRootPageStubs();
    }
}
